package com.gpj.learn.rabbitmq.springboot.service;

import com.gpj.learn.rabbitmq.springboot.common.RabbitMessageType;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @className MessageSender
 * @description rabbitMQ发送工具类
 * @author GPJ
 * @date 2021/9/3 16:42
 * @version 1.0
 **/
@Component
public class RabbitSender {
	@Autowired
	private RabbitTemplate rabbitTemplate;

	/**
	 * 向mq发送消息
	 * @param type 消息类型
	 * @param message 消息本体
	 */
	public void send(RabbitMessageType type, Object message){
		if(StringUtils.isBlank(type.getExchange()) && StringUtils.isBlank(type.getRoutKeying())){
			rabbitTemplate.convertAndSend(type.getQueue(), type.getRoutKeying(), message);
		} else {
			rabbitTemplate.convertAndSend(type.getExchange(), type.getRoutKeying(), message);
		}
	}

	/**
	 * 非工作队列模式的消息发送
	 * @param exchange 交换机名称
	 * @param routingKey 路由key
	 * @param message 消息本体
	 */
	private void send(String exchange, String routingKey, Object message){
		rabbitTemplate.convertAndSend(exchange, routingKey, message);
	}

	/**
	 * 工作队列模式的消息发送
	 * @param queue 队列名称
	 * @param message 消息本体
	 */
	private void send(String queue, Object message){
		rabbitTemplate.convertAndSend(queue, message);
	}
}
